import java.util.Scanner;

public class ChessBoard {
    int tile=1;//表示L型骨牌
    int[][]board=new int[100][100];
    public void chessBoard(int tr,int tc,int dr,int dc,int size){
        //起始坐标（tr:行,tc:列）   dr dc 特殊方格坐标   size 棋盘尺寸
        if (size==1)
            return;
        int t = tile++;
        int s = size/2;
        //特殊方格在左上角
        if (dr < tr + s && dc < tc + s){
            chessBoard(tr,tc,dr,dc,s);
        }else {//不在左上角
            board[tr + s - 1][tc + s - 1]= t;//该棋盘与其他三个棋盘的交汇处标记为特殊方格
            chessBoard(tr,tc,tr + s - 1,tc + s - 1,s);
        }
        //特殊方格在右上角
        if (dr < tr + s && dc >= tc + s){
            chessBoard(tr,tc + s,dr,dc,s);
        }else {//不在右上角
            board[tr + s - 1][tc + s]=t;//该棋盘与其他三个棋盘的交汇处标记为特殊方格
            chessBoard(tr,tc + s,tr + s - 1,tc + s,s);
        }
        //特殊方格在左下角
        if (dr >= tr + s && dc < tc + s){
            chessBoard(tr + s,tc,dr,dc,s);
        }else {//不在左下角
            board[tr + s][tc + s - 1]=t;//该棋盘与其他三个棋盘的交汇处标记为特殊方格
            chessBoard(tr + s,tc,tr + s,tc + s - 1,s);
        }
        //特殊方格在右下角
        if (dr >= tr + s && dc >= tc + s){
            chessBoard(tr + s,tc + s,dr,dc,s);
        }else {//不在右下角
            board[tr + s][tc + s]=t;//该棋盘与其他三个棋盘的交汇处标记为特殊方格
            chessBoard(tr + s,tc + s,tr + s,tc + s,s);
        }
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入棋盘的大小（size）");
        int size=sc.nextInt();
        System.out.println("请输入特殊方格的位置(dr,dc)");
        int dr=sc.nextInt();
        int dc=sc.nextInt();
        ChessBoard chessBoard=new ChessBoard();
        //覆盖棋盘
        chessBoard.chessBoard(0,0,dr,dc,size);
        //打印覆盖后的棋盘
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                System.out.print(String.format("%5d",chessBoard.board[i][j]));
            }
            System.out.println();
        }
    }
}
